package CutLoad.components
{
	import CutLoad.Base;
	import CutLoad.components.container.Container;
	import CutLoad.components.container.ContainerH;
	import CutLoad.components.container.ContainerV;
	import CutLoad.web.slide.CSlideBtn;
	
	import flash.events.MouseEvent;
	
	/**
	 * 按钮组，当点击其中一，该按钮处于hit状态，其它的处于up状态
	 * @author smallerbird mail:smallerbird@gmail.com  site:www.mkigm.com QQ群:49983196
	 * 下午02:43:01 
	 *
	 */
	public class CButtonBar extends Base
	{
		private var funChang:Function;
		private var currentBtn:CButton;
		private var arrBtn:Array;
		private var container:Container;
		//是否暂停点击事件
		private var isStopClick:Boolean;
		/**
		 * 初始化 
		 * @param arrLable 要生成的按钮数组，如：[按钮1CButton对象,按钮2CButton对象,按钮3CButton对象...]
		 * @param funChang 点击某一个按钮，回调方法  格式:function(第几个按钮:Number,me:CButtonBar);
		 * @param space 间距
		 * @param isLayoutVertical 是水平排列false，还是垂直排列true
		 * @param CurrentSelectBtnIndex 哪一个按钮处于选重状态，默认为0,注：如果设置小于的0的数，则不显示任何。
		 * 
		 */		
		public function CButtonBar(arrCButton:Array,funChang:Function,space:Number=0,isLayoutVertical:Boolean=false,CurrentSelectBtnIndex:Number=0)
		{
			this.funChang=funChang;
			if(!isLayoutVertical){
				container=ContainerH.getSimple({w:10,h:10,isAuto:false,xspace:space,yspace:space});
			}else{
				container=ContainerV.getSimple({w:10,h:10,isAuto:false,xspace:space,yspace:space});
			}
			arrBtn=new Array();
			var arrLable:Array=arrCButton;
			for(var i:Number=0;i<arrLable.length;i++){
				var btn:CButton;
				btn=arrLable[i];
				if(!(btn is CButton)) throw new Error("arrCButton one is not CButton  !!!");
				btn.addEventListener(MouseEvent.CLICK,clcik);
				btn.setOtherInfo({CButtonBar_btn_index:i});
				container.append(btn,i==arrLable.length-1?true:false);
				arrBtn.push(btn);
				//第一个
				if(i==0) currentBtn=btn;
			}			
			container.setTakeWH();
			//container.showGuide();
			changCurrentSelectBtn(CurrentSelectBtnIndex)
			//
			container.show(this);
			isStopClick=false;
		}
		/**
		 * 暂停点击各按钮改变状态的功能。
		 * 
		 */		
		public function stopClick():void{
			isStopClick=true;
		}
		/**
		 *  恢复：用stopClick暂停点击各按钮改变状态的功能。
		 * 
		 */		
		public function startClick():void{
			isStopClick=false;
		}
		/**
		 * 获得当前选择的索引 
		 * @return 
		 * 
		 */		
		public function get currentIndex():Number{
			return currentBtn.getOtherInfo().CButtonBar_btn_index;
		}
		/**
		 * 选择当前选择的按钮 
		 * @return 
		 * 
		 */		
		public function get currentSelectBtn():CButton{
			return currentBtn
		}
		/**
		 * 改变当前所选的按钮 
		 * @param index 第几个按钮 从0开始
		 * @param isFunChangRun 改变时是否调用设置的回调方法funChang，注：这里指的是初始化时传入的那个回调方法
		 * @return 
		 * 
		 */		
		public function changCurrentSelectBtn(index:uint,isFunChangRun:Boolean=false):Boolean{
			if(currentBtn!=null){
				currentBtn.setState();
				currentBtn.enable=true;
			}
			if(index<0||index>arrBtn.length-1) return false;
			var btnTem:CButton=arrBtn[index] as CButton
			//
			index=btnTem.getOtherInfo().CButtonBar_btn_index;
			if(isFunChangRun) funChang(index,this);
			btnTem.setState(2);
			btnTem.enable=false;
			currentBtn=btnTem;
			return true;
		}
		override public function killMe():void{
			for(var i:Number=0;i<this.arrBtn.length;i++){
				var btn:CButton=arrBtn[i] as CButton;
				if(btn.hasEventListener(MouseEvent.CLICK)) btn.removeEventListener(MouseEvent.CLICK,clcik);
				btn.killMe();
				btn=null;
			}
			container.killMe();
			container=null
			super.killMe()
		}
		private function clcik(e:MouseEvent):void{
			if(isStopClick) return;
			if(currentBtn!=null){
				currentBtn.setState();
				currentBtn.enable=true;
			}
			var btnTem:CButton=e.target as CButton;
			var index:Number=btnTem.getOtherInfo().CButtonBar_btn_index;
			funChang(index,this);
			btnTem.setState(2);
			btnTem.enable=false;
			currentBtn=btnTem;
		}
	}
}